package packageDataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import packageException.ConnexionException;
import packageException.DataException;
import packageModel.Utilisateur;

/**
 *
 * @author Lionel & Julien
 */
public class ConnexionSyllathequeData {
    /**
     * Retourne l'utilisateur correspondant au pseudo et au password !
     * 
     * @param pseudo
     * @param password
     * @return Utilisateur
     * @throws ConnexionException
     * @throws DataException
     * 
     * @TODO Pour une meilleure sécurisation, un cryptage (en MD5 ou SHA1) pourrait avoir lieu.
     */
    public Utilisateur connexionSyl (String pseudo, String password) throws 
            ConnexionException,
            DataException {
        Utilisateur user = null;
        try {
            // Connexion à la base de données
            Context ctx = new InitialContext(); 
            DataSource source = (DataSource) ctx.lookup("jdbc/Syllatheque"); 
            Connection connexion = source.getConnection();
            
            // SQL
            String requeteSql = "SELECT * "
                    + "FROM Utilisateur "
                    + "WHERE pseudo = ? "
                    + "AND password = ? "
                    + "ORDER BY pseudo";

            // Traitement
            PreparedStatement prepStat = connexion.prepareStatement(requeteSql);
            prepStat.setString(1, pseudo);
            prepStat.setString(2, password);

            ResultSet donnees = prepStat.executeQuery();
            donnees.next();       
            
            user = new Utilisateur(
                        donnees.getString("pseudo"), 
                        donnees.getString("nom"), 
                        donnees.getString("prenom"), 
                        donnees.getString("password"), 
                        donnees.getBoolean("isProf"), 
                        donnees.getString("adresse"), 
                        donnees.getString("telephone"), 
                        donnees.getString("mail"), 
                        donnees.getString("siteWeb")
                    );
            
            // Fermeture de la connexion
            connexion.close();
        }
        catch(SQLException e) {
            // ERREUR
            throw new ConnexionException(e.getMessage());
        }
        catch(NamingException e) {
            // ERREUR
            throw new DataException(e.getMessage());
        }
        return user;
    }
    
}
